/*
 *	Copyright 2011 ja4cli
 *
 *	Licensed under the Apache License, Version 2.0 (the "License");
 *	you may not use this file except in compliance with the License.
 *	You may obtain a copy of the License at
 *
 *		http://www.apache.org/licenses/LICENSE-2.0
 *
 *	Unless required by applicable law or agreed to in writing, software
 *	distributed under the License is distributed on an "AS IS" BASIS,
 *	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *	See the License for the specific language governing permissions and
 *	limitations under the License.
 */
package org.skarby.ja4cli.internal;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class ReflectionUtilities {

	public static Collection<Field> getFieldsAnnotatedWith(Class<?> clazz, Class<? extends Annotation> ... annotations) {
		Set<Field> fields = new HashSet<Field>();
		for (Field field : clazz.getDeclaredFields()) {
			for (Class<? extends Annotation> annotation : annotations) {
				if (field.isAnnotationPresent(annotation)) {
					fields.add(field);
				}
			}
		}
		// Traverse into the parent hierarchy
		Class<?> parent = clazz.getSuperclass();
		if (parent != null) {
			fields.addAll(getFieldsAnnotatedWith(parent, annotations));
		}
		return fields;
	}
}
